# rubocop:disable Lint/NestedMethodDefinition
class Sequencer
  class Unit
    module Mixin
      module DynamicAttribute

        def self.included(base)

          class << base

            def inherited(base)
              base.extend(Forwardable)
              base.instance_delegate [:attribute] => base
            end

            def attribute
              @attribute ||= begin
                if uses.size != 1
                  raise "DynamicAttribute classes can use exactly one attribute. Found #{uses.size}."
                end
                uses.first
              end
            end
          end
        end

        private

        def attribute_value
          @attribute_value ||= state.use(attribute)
        end
      end
    end
  end
end
